package chapter07

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test01_Array
 * Package: chapter07
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-27
 *          Time: 19:04
 */

object Test01_Array {
  def main(args: Array[String]): Unit = {

    //创建不可变数组
    //不可变只的是引用对象的地址 和 创建之初分配的地址空间的大小
    //所以可以对不可变数组 修改 和 获取值 只是不能增加和删除 地址空间变化了
    //但是可以变化之后赋值给一个新的数组

    //1.第一种方式 10是空间大小 默认值为0
    val arr1 = new Array[Int](10)
    //Array[Int] 泛型表示存储Int类型 如果希望存储任意类型 指定Any

    //2.第二种创建数组的方式 创建也赋值 底层调用了Array伴生对象的apply方法
    val arr2 = Array(1, 2, 3, 4)

    //数组的遍历 普通遍历for  0 until arr1.length
    for (i <- 0 until arr1.length) {
      //println(arr1(i))
    }

    //0 until arr1.length 可以使用封装好的 indices
    for (i <- arr2.indices) {
      println(arr2(i))
    }

    println("-------------------")
    //for循环增强遍历
    for (elem <- arr2) {
      println(elem)
    }
    val inter = arr2.indices
    println(inter) //Range 0 until 4


    //迭代器遍历
    val iterator = arr2.iterator
    while (iterator.hasNext) {
      println(iterator.next())
    }


    //foreach遍历 传了匿名函数 lambda表达式
    arr2.foreach((elem: Int) => println(elem))
    //匿名函数的至简原则
    arr2.foreach(println)

    //转换为字符串String 输出
    println(arr2.mkString(","))

    //追加 末尾追加 ＋在后面 最末追加
    val newArray = arr2.:+(45)
    //底层获取到arr2的长度 然后new一个新的数组长度+1 拷贝在添加

    //最前添加 ＋在前面 最前添加
    val newArr2 = arr2.+:(99)

    //Scala当中 运算符的本质 也是方法调用 .可以省略
    //之后 : 都是要靠近引用类型
    //只用一个参数 括号可以省略 末尾追加
    val newArr3 = arr2 :+ (99)
    //开头追加
    val newArr4 = 100 +: arr2


  }
}
